#ifndef __SWD3E_ADDRESS_H__
#define __SWD3E_ADDRESS_H__

#include "config.h"

/**********************************************************************************************************************************/
/**********************************************************************************************************************************/
#define RUN_FIGHT_ADDRESS (LOAD_ADDRESS + 0x00115B14) // (uint8_t Run_Fight) bool ？

#define EX_COMMAND_COUNT_ADDRESS (LOAD_ADDRESS + 0x001BFA7C) // (int16_t ExCommandCount) 战斗其它菜单 数量
#define EX_COMMAND_NO_ADDRESS (LOAD_ADDRESS + 0x001BFA7E)    // (int16_t ExCommandNo[4]) 战斗其它菜单 索引？

#define IS_SHOW_MENU_ADDRESS (LOAD_ADDRESS + 0x001BFEB4) // (uint8_t isShowMenu) bool is显示战斗菜单？

#define FORCE_SPELL_MENU_ADDRESS (LOAD_ADDRESS + 0x001C0540)   // (uint8_t ForceSpellMenu) bool is战斗？菜单
#define FORCE_COMMAND_MENU_ADDRESS (LOAD_ADDRESS + 0x001C0541) // (uint8_t ForceCommandMenu) bool is战斗符鬼菜单
#define FORCE_OBSOLT_MENU_ADDRESS (LOAD_ADDRESS + 0x001C0542)  // (uint8_t ForceObsoltMenu) bool is战斗炼妖菜单
#define FORCE_CHATTR_MENU_ADDRESS (LOAD_ADDRESS + 0x001C0543)  // (uint8_t ForceChAttrMenu) bool is战斗？菜单

#define BOOL_WIN_MENU_ADDRESS (LOAD_ADDRESS + 0x001C05F4) // (uint8_t bWinMenu) bool is胜利菜单？

#define MAIN_MENU_SELECTITEM_ADDRESS (LOAD_ADDRESS + 0x00115974) // (int MainMenu_selectitem) 菜单选项选中index，start=1
#define FMENU_ADDRESS (LOAD_ADDRESS + 0x001BE958)                // (int fMenu) 菜单样式

#define OBSOLT_SEL_ADDRESS (LOAD_ADDRESS + 0x001C0538) // (int ObsoltSel) 战斗炼妖菜单选项选中index，start=1，max=2

#define FONT_USE_GB_ADDRESS (LOAD_ADDRESS + 0x001C85A4) // (int FONT_USE_GB) 是否使用简体中文
#define LANG_ID_ADDRESS (LOAD_ADDRESS + 0x001C85A8)     // (int LangID) 语言ID （0=繁体，1=简体，2=其它（等同于1））

#define DEF_GAME_FONT_ADDRESS (LOAD_ADDRESS + 0x00110C0C)    // (char *DEF_GAME_FONT) 默认字库名
#define DEF_GAME_FONT_CT_ADDRESS (LOAD_ADDRESS + 0x00110C10) // (char *DEF_GAME_FONT_CT) 简中字库名

/**********************************************************************************************************************************/
/******************** commandButtonClass ***********************************************************************************************/
// --战斗主菜单 --commandButtonClass 列表
#define MAIN_COMMAND_BUTTONS_ADDRESS (LOAD_ADDRESS + 0x001B418C) // (commandButtonClass mainCommandButton[7])
                                                                 // (攻击，奇术，物品，绝技，防御，炼妖，符鬼)

// --战斗其它菜单 --char* 列表
#define EX_COMMAND_STRINGS_ADDRESS (LOAD_ADDRESS + 0x001BF7A8) // (char *ExCommand[4])
                                                               // 动态

// --战斗其它菜单 --commandButtonClass 列表
#define EX_COMMAND_BUTTONS_ADDRESS (LOAD_ADDRESS + 0x001BF7B8) // (commandButtonClass ExCommandButton[4])
                                                               // 其它

// --战斗提示 （失误）--SDL_Surface* 列表
#define MISS_IMAGES_ADDRESS (LOAD_ADDRESS + 0x001C0548) // (SDL_Surface *Miss_Images[3])
                                                        // （失误）（语言为简体时使用）

// --战斗子菜单 （符鬼） --char* 列表
#define EX_COMMAND_NAMES_ADDRESS (LOAD_ADDRESS + 0x001C0610) // (char *ExCommandName[8])
                                                             // （自由攻击，保存灵力，灵力攻击，保护主人，攻击弱者，攻击强者，援助伙伴，锁定目标）

// --战斗子菜单 （炼妖） --char* 列表
#define OBSOLT_COMMAND_STRINGS_ADDRESS (LOAD_ADDRESS + 0x001C0630) // (char *ObsoltCommand[2])
                                                                   // （收化，诱饵）
// --战斗子菜单 （炼妖） --commandButtonClass 列表
#define OBSOLT_COMMAND_BUTTONS_ADDRESS (LOAD_ADDRESS + 0x001C0638) // (commandButtonClass ObsoltCommandButton[2])
                                                                   // （收化，诱饵）

// --设置菜单 （符鬼设置--属性参数） --char* 列表
#define ATTR_COMMAND_STRINGS_ADDRESS (LOAD_ADDRESS + 0x001C06B8) // (char *AttributeName[5])
                                                                 // （金，木，水，火，土）

// --Charge （） --char* 列表
#define CHARGE_COMMAND_STRINGS_ADDRESS (LOAD_ADDRESS + 0x001C06CC) // (char *ChargeCommand[2])
                                                                   // （继续，放劲）

// --战斗选项 （逃跑） --commandButtonClass
#define RETREAT_BUTTON_ADDRESS (LOAD_ADDRESS + 0x001C0734) // (commandButtonClass RetreatButton)

// --战斗选项 （自动） --commandButtonClass
#define AUTO_BUTTON_ADDRESS (LOAD_ADDRESS + 0x001C0774) // (commandButtonClass AutoButton)

/*****************************************************************************************************************************/
/******************** SDL_SS2D SS2D ***********************************************************************************************/
#define SS2D_ADDRESS (LOAD_ADDRESS + 0x001438A8) // (struct SDL_SS2D SS2D)

// DriverData
#define SS2D_DRIVER_DATA_ADDRESS (SS2D_ADDRESS + 0) // (struct UNK *dviverdata) (猜测为驱动数据，包含音频、视频、控制器等数据)

#define SS2D_ACCUMULATION_SURFACE_ADDRESS (SS2D_ADDRESS + 1 * 4) // (SDL_Surface *) rgb565
#define SS2D_ACCUMULATION_TEXTURE_ADDRESS (SS2D_ADDRESS + 2 * 4) // (SDL_Texture *) rgba8888

// Coord
#define SS2D_RENDER_DST_RECT_ADDRESS (SS2D_ADDRESS + 21 * 4) // (SDL_rect rect)
#define SS2D_RENDER_SCALE_X_ADDRESS (SS2D_ADDRESS + 29 * 4)  // (float scale_x)
#define SS2D_RENDER_SCALE_Y_ADDRESS (SS2D_ADDRESS + 30 * 4)  // (float scale_y)

// Background
#define SS2D_BG_SURFACE_ADDRESS (SS2D_ADDRESS + 34 * 4) // (SDL_Surface *bg_surface) 从 Background.png 读取
#define SS2D_BG_TEXTURE_ADDRESS (SS2D_ADDRESS + 35 * 4) // (SDL_Texture *bg_texture) 从 bg_surface 创建

// Rgb32 surface (used to convert rgb565 ==> rgba8888)
#define SS2D_CONVERSION_SURFACE_ADDRESS (SS2D_ADDRESS + 215 * 4) // (SDL_Surface *rgb32_surface) rgba8888

/*****************************************************************************************************************************/
/******************** FileIO fileIO ***********************************************************************************************/
// FileIO
#define FILEIO_ADDRESS (LOAD_ADDRESS + 0x001C49A0) // (fileIO *FileIO) (结构体)

/*****************************************************************************************************************************/
/******************** StringDBmap ***********************************************************************************************/
// StringDBmap
#define STRING_DB_MAP_ADDRESS (LOAD_ADDRESS + 0x00115E98) // (StringDBmapList StringDBmap) (结构体)

#endif